package com.wjm.JavaSEAPI.integer;

/**
 * Data:2022年07月03日
 * Author:wjm
 * Content: 包装类
 *
 *
 *  Integer包装类的作用
 *          可以将一个基本数据类型转化为包装类，(就是让基本数据类型可以像引用数据类型那样可以创建对象使用)
 *  Integer包装类提供了两种包装机制
 *          (1)直接new的形式
 *             int a = 123;
 *             Integer a1 = newInteger(a);
 *          (2)通过静态方法vauleOf
 *             Integer a3 = Integer.valueOf(a);
 *   注意点：
 *          如果将一个基本数据类型转化为包装类时，建议使用valueOf的方法
 *          因为对于Integer而言，valueOf方法会重用1个字节以内(0-127)所有正数的包装类对象
 *          所以valueOf方法一定程度上可以提升程序性能
 *
 *  Integer包装类提供了两种拆包机制
 *          (1)通过引用.intVaule()方法
 *          (2)通过静态方法parseInt(String str)
 *  注意点：
 *          拆包过程使用paresInt(String str)方法要注意字符串所表示的语义要和转换的基本数据类型一致
 *       不然会抛出异常NumberFormatException异常。
 *       如转换为int类型时，字符串中只能有数字和+，-的符号，如果出现空格或者非数字的英文或符号就会报错。
 *
 */
public class IntegerDemo {
    public static void main(String[] args) {
        int a = 123;

        //包装机制1
        Integer a1 = new Integer(a);
        Integer a2 = new Integer(a);
        System.out.println(a1);
        System.out.println(a1 == a2);//false

        //包装机制2
        Integer a3 = Integer.valueOf(a);
        Integer a4 = Integer.valueOf(a);
        System.out.println(a3);
        System.out.println(a3 == a4);//true,如果a不在[0，127]之间则是false

        System.out.println("----------------------------");

        //拆包机制1
        int aa = a1.intValue();
        int bb = a3.intValue();
        System.out.println(aa);
        System.out.println(bb);

        //拆包机制2
        String str1 = "123";
        String ste2 = "123.133";
        int s1 = Integer.parseInt(str1);
        System.out.println(s1);
        //int s2 = Integer.parseInt(ste2); 会报错数据类型不匹配，double类型应该用double的包装类来拆包

        double s2 = Double.parseDouble(ste2);
        System.out.println(s2);


    }
}
